package com.bart.a_data_type;

/**
 * Created by BartG on 2018/9/9.
 * ----------------------------------------
 *                 val 和 var
 * ----------------------------------------
 * val : 声明一个不可变值，类似于一个常量
 *      - 默认的匿名变量就是 val
 * var : 可变的变量
 *
 *  不管是用哪一个声明变量的时候必须初始化，解析器会根据值进行类型推断，
 *  val和var声明的时候都必须初始化。
 *
 *  ----------------------------------------
 *                  8种数据类型
 *  ----------------------------------------
 *  Boolean ：true 或者 false
 *  Byte ：8位，有符号
 *  Short ：16位，有符号
 *  Int ：32位，有符号
 *  Long ：64位，有符号
 *  Char ：16位，无符号
 *  Float ：32位，单精度浮点数
 *  Double ：64位，双精度浮点数
 *  和java不一样的是scala没有基本数据类型，都是对象类型
 *
 * ----------------------------------------
 *                 Null 和 Nothing
 * ----------------------------------------
 * Nothing ：
 *  是所有类的子类型
 * Null ：
 *  是所有引用类型的子类型（唯一实例：null）
 * Unit ：
 *  类型用来标识过程，也就是没有明确返回值的函数，由此可见Unit类似Java中的void，只有一个实例()，没有实质性的意义。
 *
 * ----------------------------------------
 *                 算术操作符和重载
 * ----------------------------------------
 * +,-,*,/ 运算符在scala中不仅仅是运算符还是一个函数
 * eg：
 *  1+1 ===》 1.+1
 * 可以使用 .xxx 调用
 *
 * ----------------------------------------
 *                 调用函数和方法
 * ----------------------------------------
 * 1. 导包：import scala.math._ 其中"_" 类似java中的"*"表示所有的意思
 *      eg:
 *          import scala.math._
 *          sqrt(2)
 * 2. 调用静态方法：
 *  Scala中没有静态方法，一般通过单实例对象或者伴生对象（类中的静态方法）
 *  eg：
 *      BigInt.probablePrime(100, scala.util.Random)
 *  对象实例调用方法：
 *  eg：
 *      "hello".distinct
 *      => helo
 *
 * ----------------------------------------
 *               apply 和 update 方法
 * ----------------------------------------
 * "Hello"(4) ===> "Hello".apply(4) 结果是：o 表示获得索引位置为4的字符
 * Array(1,2,3) ===> Array.apply(1,2,3) 生成一个数组
 *
 * ----------------------------------------
 *              option 对象
 * ----------------------------------------
 * scala为单个值提供了对象的包装容器，表示为了那种可能存在也可能不存在的值。
 * 他只有两个有效的子类对象，一个是Some，表示某个值，一个是None表示空，避免使用null
 * 空字符串的方式表示缺少某个值的用法
 * eg：
 *  val scores = Map("Alice" -> 123, "Fred" -> 56)
 *  val alice_score = scores.get("Alice")
 *      # 在 scala 的交互式环境中输出：
 *      scala> alice_scoreL Option[Int] = Some(123)
 *
 * # 使用 getOrElse("xxx")  表示如果当前的值为空的字后返回参数中的值，否则的话返回当值
 * # 返回的值是一个 Any 对象（类似于 Java 中的 Object 对象 ）
 * alice_score.getOrElse("No Score")
 *
 * ---》》》》》》》》》》 函数需要注意事项：
 * 1. scala通过=右边的表达式，推断出函数的返回值类型，如果函数体需要多个表达式，使用{}代替
 * 2. 可以把return当做函数体本身的break语句
 * 3. 递归函数一定要指定返回值类型
 * 4. 变长函数通过*来指定，所有的参数会转化为一个seq序列
 * 5. _* 告诉编译器，Range当做参数序列化处理
 * 6. Head 是获得首元素，tail是获得剩下的元素的序列
 *
 */
public class _01_BasicOne {



}
